#include "filehandler.h"

FileHandler::FileHandler()
{
    quantGrupos = 0;
    quantPontos = 0;
}

FileHandler::~FileHandler(){}

void FileHandler::setArquivoEntradaSaida(QString e)
{
    QFileInfo arquivo(e);
    arquivo_entrada = arquivo.absoluteFilePath();
    arquivo_saida.clear();
    arquivo_saida.append("Outputs/");
    arquivo_saida.append(arquivo.completeBaseName());
    arquivo_saida.append(".out");
    arquivo_saida = QFileInfo(arquivo_saida).absoluteFilePath();
}

bool FileHandler::leitura(QString nome)
{
    // Setar nomes dos arquivos:
    setArquivoEntradaSaida(nome);

    // Resetar as variáveis:
    grupos_lidos.clear();
    this->quantGrupos = 0;
    this->quantPontos = 0;

    QFile file(arquivo_entrada);

    // Se o arquivo não existir ou não for possível abri-lo:
    if (!file.exists() || !file.open(QFile::ReadOnly)) return(false);
    QTextStream stream(&file);
    QString linha_lida,g_nome;
    QList<Point> g_pontos;

    while (!stream.atEnd())
    {
        linha_lida = stream.readLine();
        if (linha_lida.startsWith("g "))
        {
            g_nome = linha_lida;
            g_pontos.clear();
            linha_lida = stream.readLine();
            do{
                // Ler a linha com as coordenadas e instaciar um novo Ponto:
                Point ponto_lido(linha_lida.toLocal8Bit().data());
                // Setar o "z" para zero:
                ponto_lido(2) = 0.0;
                // Adiciona o ponto a lista de pontos temporaria:
                g_pontos.append(ponto_lido);
                // Ler a proxima linha do arquivo
                linha_lida = stream.readLine();
            }while(!linha_lida.isEmpty());
            // Contar pontos lidos.
            quantPontos += g_pontos.size();
            grupos_lidos.append(Grupo(g_nome,g_pontos));
        }
    }
    quantGrupos = grupos_lidos.size();

    file.close();
    return(true);
}

bool FileHandler::salvar(QList<Fecho> lista_fechos)
{
    QFile file(arquivo_saida);
    if (!file.open(QFile::WriteOnly)) return(false);

    QTextStream stream(&file);

    foreach(Fecho f,lista_fechos)
    {
        // Escrever o nome do grupo no arquivo:
        stream<<f.get_nome()<<endl;
        // Escrever os IDs dos pontos:
        for (int i=0 ; i<f.get_ids().size() ; i++)
        {
            stream<<f.get_ids().at(i);
            if (i != (f.get_ids().size())-1) stream<<" ";
        }
        stream<<endl<<endl;
    }

    file.close();
    return(true);
}

const QList<Grupo>& FileHandler::getGrupos()
{
    return(grupos_lidos);
}

pair<size_t, size_t> FileHandler::getEstatisticas()
{
    return(pair<size_t,size_t>(quantGrupos,quantPontos));
}
